"""Haiku Lab test module.

Author: Chris Mayfield
Version: 03/31/2023
"""

from haiku_checker import remove_symbols, check_syllables, validate_haiku

ha4 = "ha ha ha ha\n"
ha5 = "ha ha ha ha ha\n"
ha6 = "ha ha ha ha ha ha\n"
ha7 = "ha ha ha ha ha ha ha\n"
ha8 = "ha ha ha ha ha ha ha ha\n"


def test_remove_symbols():
    assert remove_symbols("Hello! How are you?") == "Hello How are you"
    assert remove_symbols("This, is. /a ;test'") == "This is a test"
    assert remove_symbols("Try: 1 + 2 = 3") == "Try     "


def test_check_syllables():
    assert check_syllables("Hello world", 2) == "too long"
    assert check_syllables("Hello world", 3) == "valid"
    assert check_syllables("Hello world", 4) == "too short"


def test_validate_haiku_valid():
    text = "An old silent pond\nA frog jumps into the pondâ€”\nSplash! Silence again.\n"
    assert validate_haiku(text) == "Valid haiku."
    text = "The west wind whispered,\nAnd touched the eyelids of spring:\nHer eyes, Primroses.\n"
    assert validate_haiku(text) == "Valid haiku."


def test_validate_haiku_not_3():
    for number_of_lines in [0, 2, 4]:
        assert validate_haiku("Line\n" * number_of_lines) == "Invalid haiku, not 3 lines."


def test_validate_haiku_one_invalid():
    assert validate_haiku(ha4 + ha7 + ha5) == "Line 1 too short. "
    assert validate_haiku(ha6 + ha7 + ha5) == "Line 1 too long. "
    assert validate_haiku(ha5 + ha6 + ha5) == "Line 2 too short. "
    assert validate_haiku(ha5 + ha8 + ha5) == "Line 2 too long. "
    assert validate_haiku(ha5 + ha7 + ha4) == "Line 3 too short. "
    assert validate_haiku(ha5 + ha7 + ha6) == "Line 3 too long. "


def test_validate_haiku_two_invalid():
    assert validate_haiku(ha4 + ha8 + ha5) == "Line 1 too short. Line 2 too long. "
    assert validate_haiku(ha6 + ha7 + ha4) == "Line 1 too long. Line 3 too short. "
    assert validate_haiku(ha5 + ha6 + ha6) == "Line 2 too short. Line 3 too long. "
    assert validate_haiku(ha5 + ha8 + ha4) == "Line 2 too long. Line 3 too short. "


def test_validate_haiku_all_invalid():
    assert validate_haiku(ha6 + ha8 + ha6) == "Line 1 too long. Line 2 too long. Line 3 too long. "
    assert validate_haiku(ha4 + ha5 + ha4) == "Line 1 too short. Line 2 too short. Line 3 too short. "